#ifndef SQLEDITOR_H
#define SQLEDITOR_H

#include <QWidget>
#include <QTextEdit>
#include <QPushButton>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QLabel>
#include <QSqlDatabase>
#include <QSqlQueryModel>
#include <QSplitter>

class SQLFormatter;
class SqlAutoComplete;
class SqlHighlighter;
class SqlTextEdit;

class SqlEditor : public QWidget
{
    Q_OBJECT

public:
    explicit SqlEditor(QWidget *parent = nullptr);
    
    QString getSqlText() const;
    void setSqlText(const QString &text);
    QSqlQueryModel* getQueryModel() const;
    void setDatabase(const QSqlDatabase &db);  // 添加设置数据库的方法
    SqlTextEdit* getTextEdit() const;  // 添加获取文本编辑器的方法
    
signals:
    void executeQuery(const QString &query);
    void queryExecuted(QSqlQueryModel *model);

public slots:
    void onQueryExecuted(QSqlQueryModel *model);
    void formatSql();  // 添加格式化SQL槽函数

private slots:
    void executeButtonClicked();

private:
    void setupUI();
    void executeQueryInternal(const QString &query);  // 内部执行查询的方法
    
    SqlTextEdit *m_sqlTextEdit;  // 使用支持代码折叠的文本编辑器
    QPushButton *m_executeButton;
    QPushButton *m_formatButton;  // 添加格式化按钮
    QLabel *m_resultLabel;
    QSqlQueryModel *m_resultModel;
    QSplitter *m_splitter;
    QWidget *m_resultView;  // 显示查询结果的视图
    QSqlDatabase m_database;  // 数据库连接
    SQLFormatter *m_sqlFormatter;  // SQL格式化器
    SqlAutoComplete *m_autoComplete;  // SQL自动补全器
    SqlHighlighter *m_highlighter;  // SQL语法高亮器
};

#endif // SQLEDITOR_H